//
//  UIViewController+runtimeCheck.h
//  FCTools
//
//  Created by WJC on 2018/10/25.
//  Copyright © 2018 wjc. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIViewController (runtimeCheck)
/**
 检测对象是否存在该属性
 
 @param instance 控制器对象
 @param verifyPropertyName 控制器属性值
  @param log 是否打印log
 @return 是否存在
 */

- (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName andLogAllProperty:(BOOL)log;
/**
 获取相应的控制器属性的对应类型
 
 @param controller 控制器
 @param verifyPropertyName 类型的命名
 @return 类型char
 */
-(const char*)getControllerIvalWithController:(id)controller andPropertyName:(NSString *)verifyPropertyName;
/**
 检测对象是否存在该法
 
 @param instance 控制器对象
 @param verifyMethodName 方法名
 @return 是否存在
 */
- (BOOL)checkIsExistMethodWithInstance:(id)instance verifyMethodName:(NSString *)verifyMethodName;

/**
 方法交换
 
 @param funcClass 被交换的对象类
 @param method 被交换的方法
 @param ControllerClass 交换的对象
 @param ChangeMethod 交换的方法
 */
-(void)changeMethodWithFuncClass:(Class)funcClass andMethod:(SEL)method andChangeControllerClass:(Class)ControllerClass andChangeMethod:(SEL)ChangeMethod;
/**
 rt控制器跳转
 
 @param name 控制器名
 @param objectData 控制器属性值
 */
-(UIViewController *)pushAppControllerWithControllerName:(NSString*)name andObjectData:(NSDictionary*)objectData  andTitle:(NSString*)title;

///**
//  rt控制器跳转,控制器包含跨组价model
//
// @param name 控制器名
// @param url 组件API地址
// @param modelString 组件Model
// @param title 控制器标题
// @return 返回k当前控制器
// */
//-(UIViewController *)pushAppControllerWithControllerName:(NSString*)name andURL:(NSString*)url andModelStr:(NSString*)modelString andTitle:(NSString*)title;
/**
 OBJ初始化并赋值
 
 @param name 初始化名
 @param objectData 赋值内容KVC
 */
-(id)initWithObjectName:(NSString*)name andObjectData:(NSDictionary*)objectData;

/**
 OBJ调用私有(共有方法)

 @param Ojbect 调用的类
 @param name 调用名
 @return 返回值
 */
-(id)getObjectWithOjbect:(Class)Ojbect andName:(NSString*)name;

/**
 调用方法传入多参数

 @param Ojbect 方法所在控制器
 @param method 方法名
 @param object 参数
 // 调用方法三
 [self perform:@"testDemo:withSeconde:withThree:" withObjects:@"first",@"sercond",@"three",nil];
 */
- (id)performObjbect:(Class)Ojbect andMethod:(NSString *)method withObjects:(id)object,...;
/**
 调用类方法,传入多参数

 @param aSelector 方法名
 @param object 数据
 @return 返回值
 */
- (id)performSelector:(SEL)aSelector withObjects:(id)object,...;
//- (void)setCallBlock:(SEL)callBlock;
//
//- (id )callBlock;


@end
